return {
  "mfussenegger/nvim-lint",
  event = "BufReadPre",
  config = function()
    local lint = require("lint")
    lint.linters_by_ft = {
      javascript = { "eslint_d" },
      typescript = { "eslint_d" },
      vue = { "eslint_d" },
      json = { "eslint_d" },
      editorconfig = { "editorconfig-checker" },
      sh = { "shellcheck" },
      bash = { "shellcheck" },
    }

    local ignore_buftype = {
      markdown = { "nofile" },
    }

    lint.linters.eslint_d = {
      name = "eslint_d", -- cargo install --features allocator --git https://github.com/oxc-project/oxc oxc_cli
      cmd = "eslint_d",
      stdin = false,
      args = { "--format", "unix" },
      stream = "stdout",
      ignore_exitcode = true,
      parser = require("lint.parser").from_errorformat("%f:%l:%c: %m", {
        source = "eslint_d",
        severity = vim.diagnostic.severity.WARN,
      }),
    }

    vim.api.nvim_create_autocmd({ "BufWritePost", "BufEnter" }, {
      group = vim.api.nvim_create_augroup("lint", { clear = true }),
      callback = function()
        if ignore_buftype[vim.bo.filetype] then
          for _, buftype in ipairs(ignore_buftype[vim.bo.filetype]) do
            if buftype == vim.bo.buftype then
              return
            end
          end
        end

        lint.try_lint()
      end,
    })
  end,
}
